﻿using Engine;
using Game;

namespace NK.Map
{
    /// <summary>  
    /// 工具类，用于处理纹理坐标转换相关的操作。  
    /// </summary>  
    public class Tool
    {
        // 纹理槽，用来供纹理转换  
        private static Vector4[] slotTexCoords = new Vector4[256];

        /// <summary>  
        /// 获取或设置纹理坐标槽数组。  
        /// </summary>  
        public static Vector4[] SlotTexCoords
        {
            get => slotTexCoords;
            set => slotTexCoords = value;
        }

        /// <summary>  
        /// 计算纹理坐标槽表。  
        /// </summary>  
        public static void CalculateSlotTexCoordTables()
        {
            for (int i = 0; i < 256; i++)
            {
                // 将纹理槽转换为纹理坐标并存储到数组中  
                slotTexCoords[i] = TextureSlotToTextureCoords(i);
            }
        }

        /// <summary>  
        /// 将纹理槽转换为纹理坐标。  
        /// </summary>  
        /// <param name="slot">纹理槽索引。</param>  
        /// <returns>对应的纹理坐标。</returns>  
        public static Vector4 TextureSlotToTextureCoords(int slot)
        {
            // 计算x和y的起始坐标  
            float xStart = (slot % 16) * (1f / 16);
            float yStart = (slot / 16) * (1f / 16);

            // 计算x和y的结束坐标，并添加小的偏移量以避免精度问题  
            float xEnd = (slot % 16 + 1) * (1f / 16);
            float yEnd = (slot / 16 + 1) * (1f / 16);

            // 返回纹理坐标，其中z和w分别为x和y的结束坐标  
            return new Vector4(xStart, yStart, xEnd, yEnd);
        }
    }
}